﻿using System;
using System.Collections;
using System.Linq;
using System.Text;

namespace NGI_Entidades
{
    public class Cliente : CamposAuditoria
    {
        #region Propiedades
        private Int32 _id = 0;
        private String _cuit = "";
        private String _razonSocial = "";
        private String _email = "";
        private String _direccion = "";
        private String _codigoPostal = "";
        private String _ciudad = "";
        private String _localidad = "";
        private String _contacto = "";
        private Provincia _provincia;
        private String _ingresosBrutos = "";
        private Int32 _isib = 0;
        private CategoriaIVA _categoriaIVA;
        private Telefono[] _telefonos;
        private Pago[] _pagos;
        private Double _adeudado = 0f;
        private Boolean _activo;
        #endregion Propiedades

        #region Getters y Setters
        public Int32 ID
        {
            get { return _id; }
            set { _id = value; }
        }

        public Pago[] Pagos
        {
            get { return _pagos; }
            set { _pagos = value; }
        }
        
        public String IngresosBrutos
        {
            get { return _ingresosBrutos; }
            set { _ingresosBrutos = value; }
        }

        public String Localidad
        {
            get { return _localidad; }
            set { _localidad = value; }
        }

        public Int32 ISIB
        {
            get { return _isib; }
            set { _isib = value; }
        }

        public Double Adeudado
        {
            get { return _adeudado; }
            set { _adeudado = value; }
        }

        public Provincia Provincia
        {
            get { return _provincia; }
            set { _provincia = value; }
        }

        public String CUIT
        {
            get { return _cuit; }
            set { _cuit = value; }
        }

        public String RazonSocial
        {
            get { return _razonSocial; }
            set { _razonSocial = value; }
        }

        public String Email
        {
            get { return _email; }
            set { _email = value; }
        }

        public String Direccion
        {
            get { return _direccion; }
            set { _direccion = value; }
        }

        public String CodigoPostal
        {
            get { return _codigoPostal; }
            set { _codigoPostal = value; }
        }

        public String Ciudad
        {
            get { return _ciudad; }
            set { _ciudad = value; }
        }

        public String Contacto
        {
            get { return _contacto; }
            set { _contacto = value; }
        }

        public CategoriaIVA CategoriaIVA
        {
            get { return _categoriaIVA; }
            set { _categoriaIVA = value; }
        }

        public Telefono[] Telefonos
        {
            get { return _telefonos; }
            set { _telefonos = value; }
        }

        public Boolean Activo
        {
            get { return _activo; }
            set { _activo = value; }
        }
        #endregion Getters y Setters

        #region Constructores
        public Cliente() { }

        public Cliente(Int32 ID)
        {
            this._id = ID;
        }

        public Cliente(Int32 ID, String RazonSocial)
        {
            this._id = ID;
            this._razonSocial = RazonSocial;
        }

        public Cliente(Int32 ID, String RazonSocial, String CUIT, Boolean Activo)
        {
            this._id = ID;
            this._razonSocial = RazonSocial;
            this._cuit = CUIT;
            this._activo = Activo;
        }

        public Cliente(Int32 ID, String CUIT, String RazonSocial, String Email, String Direccion, String CodigoPostal, String Ciudad, String Localidad, Provincia Provincia, String Contacto, String IngresosBrutos, Int32 ISIB, Double Adeudado, CategoriaIVA Categoria, Telefono[] Telefonos, Boolean Activo)
            :this(CUIT, RazonSocial, Email, Direccion, CodigoPostal, Ciudad, Localidad, Provincia, Contacto, IngresosBrutos, ISIB, Adeudado, Categoria, Telefonos, Activo)
        {
            this._id = ID;
        }

        public Cliente(Int32 ID, String CUIT, String RazonSocial, String Email, String Direccion, String CodigoPostal, String Ciudad, String Localidad, Provincia Provincia, String Contacto, String IngresosBrutos, Int32 ISIB, Double SaldoTotal, Double Adeudado, CategoriaIVA Categoria, Telefono[] Telefonos, Boolean Activo)
            : this(CUIT, RazonSocial, Email, Direccion, CodigoPostal, Ciudad, Localidad, Provincia, Contacto, IngresosBrutos, ISIB, SaldoTotal, Categoria, Telefonos, Activo)
        {
            this._adeudado = Adeudado;
            this._id = ID;
        }

        public Cliente(Int32 ID, String CUIT, String RazonSocial, String Email, String Direccion, String CodigoPostal, String Ciudad, String Localidad, Provincia Provincia, String Contacto, String IngresosBrutos, Int32 ISIB, Double SaldoTotal, CategoriaIVA Categoria, Boolean Activo)
        {
            this._id = ID;
            this._cuit = CUIT;
            this._razonSocial = RazonSocial;
            this._email = Email;
            this._direccion = Direccion;
            this._codigoPostal = CodigoPostal;
            this._ciudad = Ciudad;
            this._provincia = Provincia;
            this._contacto = Contacto;
            this._ingresosBrutos = IngresosBrutos;
            this._isib = ISIB;
            this._localidad = Localidad;
            this._categoriaIVA = Categoria;
            this._activo = Activo;
        }


        public Cliente(Int32 ID, String CUIT, String RazonSocial, String Email, String Direccion, String CodigoPostal, String Ciudad, String Localidad, Provincia Provincia, String Contacto, String IngresosBrutos, Int32 ISIB, Double SaldoTotal, Double Adeudado, CategoriaIVA Categoria, Boolean Activo)
        {
            this._id = ID;
            this._cuit = CUIT;
            this._razonSocial = RazonSocial;
            this._email = Email;
            this._direccion = Direccion;
            this._codigoPostal = CodigoPostal;
            this._ciudad = Ciudad;
            this._provincia = Provincia;
            this._contacto = Contacto;
            this._ingresosBrutos = IngresosBrutos;
            this._isib = ISIB;
            this._localidad = Localidad;
            this._categoriaIVA = Categoria;
            this._adeudado = Adeudado;
            this._activo = Activo;
        }

        public Cliente(String CUIT, String RazonSocial, String Email, String Direccion, String CodigoPostal, String Ciudad, String Localidad, Provincia Provincia, String Contacto, String IngresosBrutos, Int32 ISIB, Double Adeudado, CategoriaIVA Categoria, Telefono[] Telefonos, Boolean Activo)
        {
            this._cuit = CUIT;
            this._razonSocial = RazonSocial;
            this._email = Email;
            this._direccion = Direccion;
            this._codigoPostal = CodigoPostal;
            this._ciudad = Ciudad;
            this._contacto = Contacto;
            this._categoriaIVA = Categoria;
            this._ingresosBrutos = IngresosBrutos;
            this._isib = ISIB;
            this._localidad = Localidad;
            this._provincia = Provincia;
            this._telefonos = Telefonos;
            this._activo = Activo;
            this._adeudado = Adeudado;
        }
        #endregion Constructores

        #region Constructores Estáticos
        public static Cliente Existente(Int32 ID, String CUIT, String RazonSocial, String Email, String Direccion, String CodigoPostal, String Ciudad, String Localidad, Provincia Provincia, String Contacto, String IngresosBrutos, Int32 ISIB, Double Adeudado, CategoriaIVA Categoria, Telefono[] Telefonos, Boolean Activo)
        {
            return new Cliente(ID, CUIT, RazonSocial, Email, Direccion, CodigoPostal, Ciudad, Localidad, Provincia, Contacto, IngresosBrutos, ISIB, Adeudado, Categoria, Telefonos, Activo);
        }
        
        public static Cliente Existente(Int32 ID, String CUIT, String RazonSocial, String Email, String Direccion, String CodigoPostal, String Ciudad, String Localidad, Provincia Provincia, String Contacto, String IngresosBrutos, Int32 ISIB, Double SaldoTotal, Double Adeudado, CategoriaIVA Categoria, Boolean Activo)
        {
            return new Cliente(ID, CUIT, RazonSocial, Email, Direccion, CodigoPostal, Ciudad, Localidad, Provincia, Contacto, IngresosBrutos, ISIB, SaldoTotal, Adeudado, Categoria, Activo);
        }

        public static Cliente Existente(Int32 ID, String CUIT, String RazonSocial, String Email, String Direccion, String CodigoPostal, String Ciudad, String Localidad, Provincia Provincia, String Contacto, String IngresosBrutos, Int32 ISIB, Double SaldoTotal, CategoriaIVA Categoria, Boolean Activo)
        {
            return new Cliente(ID, CUIT, RazonSocial, Email, Direccion, CodigoPostal, Ciudad, Localidad, Provincia, Contacto, IngresosBrutos, ISIB, SaldoTotal, Categoria, Activo);
        }

        public static Cliente Nuevo(String CUIT, String RazonSocial, String Email, String Direccion, String CodigoPostal, String Ciudad, String Localidad, Provincia Provincia, String Contacto, String IngresosBrutos, Int32 ISIB, Double SaldoTotal, CategoriaIVA Categoria, Telefono[] Telefonos, Boolean Activo)
        {
            return new Cliente(CUIT, RazonSocial, Email, Direccion, CodigoPostal, Ciudad, Localidad, Provincia, Contacto, IngresosBrutos, ISIB, SaldoTotal, Categoria, Telefonos, Activo);
        }

        public static Cliente ParaListar(Int32 ID, String RazonSocial)
        {
            return new Cliente(ID, RazonSocial);
        }

        public static Cliente SinDatos(Int32 ID)
        {
            return new Cliente(ID);
        }

        public static Cliente ParaCuentaCorriente(Int32 ID, String RazonSocial, String CUIT, Boolean Activo)
        {
            return new Cliente(ID, RazonSocial, CUIT, Activo);
        }
        #endregion Constructores Estáticos
    }
}
